<?php
/**
 * PDO工具类
 * 
set character_set_client=utf8;
set character_set_connection=utf8;
set character_set_database=utf8;
set character_set_filesystem=utf8;
set character_set_results=utf8;
set character_set_server=utf8;
 * @author Administrator
 *
 */
class DBUtil{
    const host = "127.0.0.1";      //数据库服务器IP
    const port = 3306;             //端口号 默认3306
    const dbname = "yxy";          //数据库名称
    const charset = "utf8";        //字符编码
    const username = "root";       //数据库连接用户名
    const password = "";           //密码
    
    private $pdo;                           //PDO对象
    
    /**
     * 构造方法
     * @param string $host      数据库服务器IP
     * @param string $dbname    数据库名称
     * @param string $username  数据库连接用户名
     * @param string $password  密码
     * @param int $port         端口号 默认3306
     * @param string $charset   字符编码 默认utf8
     */
    public function __construct(){
        $dsn = "mysql:host=".self::host.";dbname=".self::dbname.";port=".self::port.";charset=".self::charset;
        $this->pdo = new PDO($dsn, self::username, self::password, array(
            PDO::ATTR_AUTOCOMMIT=>true,
            PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION
        ));
    }
    
    /**
     * 通用的增删改语句的执行方法 支持预编译
     *  <p>$sql语句中可能会带有?占位符，若有?，则需注意?的个数必须与$params数组中的参数个数保持一致。</p>
     * @param string $sql
     * @param array $params
     */
    public function execute($sql, $params=array()){
        $ps = $this->pdo->prepare($sql);
        $ps->execute($params);
    }
    
    /**
     * 通用的查询语句的执行方法 支持预编译
     *  <p>$sql语句中可能会带有?占位符，若有?，则需注意?的个数必须与$params数组中的参数个数保持一致。</p>
     * @param string $sql
     * @param int $fetchType 数据提取方式 默认为PDO::FETCH_ASSOC 可选值有PDO::FETCH_NUM
     * @param array $params
     * @return array: 返回查询到的数据的二维数组
     */
    public function query($sql, $params=array(), $fetchType=PDO::FETCH_ASSOC){
        $ps = $this->pdo->prepare($sql);
        $ps->execute($params);
        $data = $ps->fetchAll($fetchType);
        return $data;
    }
    
    /**
     * 通用的分页查询语句的执行方法 支持预编译
     *  <p>$sql语句中可能会带有?占位符，若有?，则需注意?的个数必须与$params数组中的参数个数保持一致。</p>
     * @param string $sql
     * @param int $pageNo
     * @param int $pageSize
     * @param array $params
     * @param int $fetchType
     * @return array 三维数组 格式如：array("total"=>$total, "rows"=>$rows, "pageNo"=>$pageNo, "pageSize"=>$pageSize)
     */
    public function queryByPage($sql, $pageNo=1, $pageSize=10, $params=array(), $fetchType=PDO::FETCH_ASSOC){
        $data = $this->query($sql, $params);
        $total = count($data);//总行数
        $rows = array_slice($data, ($pageNo-1)*$pageSize, $pageSize);//当前页要展示的数据
        return array("total"=>$total, "rows"=>$rows, "pageNo"=>$pageNo, "pageSize"=>$pageSize);
    }
 /**
     * @return the $pdo
     */
    public function getPdo()
    {
        return $this->pdo;
    }


    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
}

?>